home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / catlog / source / check.c < prev    next >
C/C++ Source or Header  |  1993-07-08  |  53KB  |  1,751 lines

  1. /*
  2.     NIFTYのLOG整理                check.c
  3.                     by GHH01217 山先
  4.     $Header: CHECK.Cv  1.2  93/02/12 22:44:02  山先  Exp $
  5. */
  6.  
  7. #include    "log.h"
  8.  
  9. #define    TEST    1
  10. #undef    TEST
  11.  
  12. #define        MAX_KAIGISHITSU        21
  13.  
  14. #define        MES_MODE        1
  15. #define        FORUM_MODE        2
  16. #define        FORUM_IN_MODE    3
  17.  
  18. static    char    kaigishitsu_name[ MAX_KAIGISHITSU ][ 82 ];
  19. static    int        lib_number;
  20.  
  21. #define    CHECK_PRINT_LOG    if ( display_log_file_sw == YES ) present_str_print()
  22.  
  23. static    int        check_start_line();
  24.  
  25. static    int        check_SearchStartSay( char *str , int mail_sw )
  26. {
  27.     char    sub[ 8 ] , *p1 , *p2;
  28.  
  29.     if ( SearchSayStartDateSw == NO )    return( YES );
  30.     p1 = sub;
  31.     if ( mail_sw == YES ) {
  32.         p2 = SearchSayStartDate + 2;
  33.     } else {
  34.         p2 = SearchSayStartDate;
  35.         *p1++ = *str++;    *p1++ = *str++;        /* YY */
  36.         str++;    /* '/' */
  37.     };
  38.     *p1++ = *str++;    *p1++ = *str++;            /* MM */
  39.     str++;    /* '/' */
  40.     *p1++ = *str++;    *p1++ = *str++;            /* DD */
  41.     *p1 = '\0';
  42.     if ( strcmp( p2 , sub ) <= 0 )    return( YES );
  43.     return( NO );
  44. }
  45.  
  46. static    int        check_SearchEndSay( char *str , int mail_sw )
  47. {
  48.     char    sub[ 8 ] , *p1 , *p2;
  49.  
  50.     if ( SearchSayEndDateSw == NO )    return( YES );
  51.     p1 = sub;
  52.     if ( mail_sw == YES ) {
  53.         p2 = SearchSayEndDate + 2;
  54.     } else {
  55.         p2 = SearchSayEndDate;
  56.         *p1++ = *str++;    *p1++ = *str++;        /* YY */
  57.         str++;    /* '/' */
  58.     };
  59.     *p1++ = *str++;    *p1++ = *str++;            /* MM */
  60.     str++;    /* '/' */
  61.     *p1++ = *str++;    *p1++ = *str++;            /* DD */
  62.     *p1 = '\0';
  63.     if ( strcmp( sub , p2 ) <= 0 )    return( YES );
  64.     return( NO );
  65. }
  66.  
  67. static    int    check_SearchSayDate( char *str , int mail_sw )
  68. {
  69.     if ( check_SearchStartSay( str , mail_sw ) == NO )    return( NO );
  70.     if ( check_SearchEndSay( str , mail_sw )   == NO )    return( NO );
  71.     return( YES );
  72. }
  73.  
  74. void    present_str_print()
  75. {
  76.     int    c;
  77.  
  78.     c = PresentStrPtr[ PresentStrLen + 1 ];
  79.     PresentStrPtr[ PresentStrLen + 1 ] = '\0';
  80.     printf("%s\n",PresentStrPtr);
  81.     PresentStrPtr[ PresentStrLen + 1 ] = c;
  82. }
  83.  
  84. void    next_str_print()
  85. {
  86.     int    c;
  87.  
  88.     c = NextStrPtr[ NextStrLen + 1 ];
  89.     NextStrPtr[ NextStrLen + 1 ] = '\0';
  90.     printf("%s\n",NextStrPtr);
  91.     NextStrPtr[ NextStrLen + 1 ] = c;
  92. }
  93.  
  94. void    present_str_copy( char *str )
  95. {
  96.     strncpy(str,PresentStrPtr,PresentStrLen); str[PresentStrLen]='\0';
  97. };
  98.  
  99. void    print_start_line()
  100. {
  101.     if ( display_log_file_sw == YES ) {
  102.         color( YELLOW ); present_str_print(); color( LIGHTBLUE );
  103.     };
  104. }
  105.  
  106.  
  107. /***************************************************************************
  108.     次のように発言の処理を行うことによって、「引用問題」の回避を行う。
  109.     「次」というのは、次の発言の処理を行うことである。
  110.         「- FFMHOB」あるいは、「1:お知らせ」の各モードによって処理は
  111.         異なる。
  112.     「無視」というのは、その行を無視することである。
  113.         「- FFMHOB」あるいは、「1:お知らせ」の各モードによって処理は
  114.         異なる。
  115.     「終了」というのは、そのモードを終了することである。
  116.  ・---------------------・---------・----------・------------・----------・ 
  117.  | mode↓    出てきた→| xxx/yyy | - FFMHOB | 1:お知らせ |  その他  | 
  118.  |------------・--------+---------+----------+------------+----------・ 
  119.  |            | 一致   |  終了   |   終了   |    終了    |   終了   | 
  120.  | xxx/yyy    |--------+---------+----------+------------+----------・ 
  121.  |            | 不一致 |  終了   |   終了   |    終了    |   終了   | 
  122.  |------------+--------+---------+----------+------------+----------・ 
  123.  |            | 一致   |  次     |   次     |    終了    |   終了   | 
  124.  | - FFMHOB   |--------+---------+----------+------------+----------・ 
  125.  |            | 不一致 |  無視   |   終了   |    終了    |   終了   | 
  126.  |------------+--------+---------+----------+------------+----------・ 
  127.  |            | 一致   |  次     |   次     |    終了    |   終了   | 
  128.  | 1:お知らせ |--------+---------+----------+------------+----------・ 
  129.  |            | 不一致 |  無視   |   無視   |    終了    |   終了   | 
  130.  ・------------・--------・---------・----------・------------・----------・ 
  131. ****************************************************************************/
  132.  
  133. void    check_save_start_sub( )
  134. {
  135.     char    *p;
  136.  
  137. #ifdef    TEST
  138.     printf("\npartition_line=\n%s",partition_line();
  139.     printf("\nforum_name=<%s>",forum_name);
  140.     printf("\nkaigishitsu_number=<%d>",kaigishitsu_number);
  141.     printf("\nhatsugen_number=<%d>",hatsugen_number);
  142.     printf("\nhatsugen_date=<%s>",hatsugen_date);
  143.     printf("\ncommnent_number=<%d>",comment_number);
  144. #endif
  145.  
  146.     catlog_fprintf( partition_line );
  147.  
  148.     /****************/
  149.     /* フォーラム名 */
  150.     /****************/
  151.     if ( *forum_name == '\0' ) {    catlog_fprintf( "UN_KNOWN" );
  152.     } else {
  153.         /* フォーラム名の拡張子は削除する */
  154.         p = last_comma( forum_name );
  155.         if ( p != forum_name )    *p = '\0';
  156.         /* フォーラム名が8文字よりも長い場合は8文字にする */
  157.         if ( strlen( forum_name ) > 8 )    forum_name[ 8 ] = '\0';
  158.         catlog_fprintf( forum_name );
  159.     };
  160.     /**************/
  161.     /* 会議室番号 */
  162.     /**************/
  163.     sprintf( str , "%d" , kaigishitsu_number );    catlog_fprintf( str );
  164.     /************/
  165.     /* 発言番号 */
  166.     /************/
  167.     sprintf( str , "%d" , hatsugen_number );    catlog_fprintf( str );
  168.     /**************/
  169.     /* 発言の日付 */
  170.     /**************/
  171.     catlog_fprintf( hatsugen_date );
  172.     /****************/
  173.     /* コメント番号 */
  174.     /****************/
  175.     sprintf( str , "%d" , comment_number );        catlog_fprintf( str );
  176.     /******************/
  177.     /* 発言の収集ID */
  178.     /******************/
  179.     catlog_fprintf( collect_id );                *collect_id = '\0';
  180.     catlog_fprintf( forum_name_line );
  181.     catlog_fprintf( forum_sub_name_line );
  182.  
  183.     hatugen_su++;        /* 1つのファイルの発言の数 */
  184. }
  185.  
  186. /******************************************************************************
  187. >LIB 数字
  188. としても、すぐに
  189. データライブラリ (1:データ一覧  2:検索  3:アップロード(無料)  4:ダウンロード  E:終了)
  190. が表示されない場合があった。(FTOWNS1 1992.8.14.アクセス )
  191.  そこで、常に
  192. >LIB 数字
  193. をチェックするように変更した。
  194. ******************************************************************************/
  195. void    check_set_lib_number()
  196. {
  197.     char    sub[ 10 ],*p1,*p2;
  198.  
  199.     if ( strncmp( PresentStrPtr , ">" , 2 ) != 0 )        return;
  200.  
  201.     /* sub に3文字コピー */
  202.     p1 = sub;    p2 = PresentStrPtr + 2;
  203.     *p1++ = *p2++;    *p1++ = *p2++;    *p1++ = *p2++;
  204.     *p1 = '\0';
  205.  
  206.     /* to upper */
  207.     p1 = sub;    while ( *p1 )    *p1++ = toupper( *p1 );
  208.  
  209.     /****************************************/
  210.     /* 以下の判定はかなり、いいかげんである */
  211.     /* ">LIB" という判定                   */
  212.     /****************************************/
  213.     if ( strcmp( sub , "LIB" ) == 0 ) {
  214.         lib_number = atoi( PresentStrPtr + 5 );
  215.     };
  216. }
  217.  
  218. /*****************************************************/
  219. /* last_str に LIB 番号が入っている                  */
  220. /* next_str には、>1 が入っていることをチェックする */
  221. /*****************************************************/
  222. int    isLibNumDir()
  223. {
  224.     int    len;
  225.     char    dir[ 20 ] , *p;
  226.  
  227.     if ( NextStrLen > 19 )                return( FALSE );
  228.     if ( NextStrLen < 3 )                return( FALSE );
  229.     if ( strncmp( NextStrPtr , ">" , 2 ) != 0 )    return( FALSE );
  230.  
  231.     len = NextStrLen - 2;
  232.     p = NextStrPtr + 2;
  233.     while ( isspace( *p ) ) {    p++;    len--;    };
  234.  
  235.     strncpy( dir , p , len );
  236.  
  237.     if ( strncmp( dir , "1" , len ) == 0 )        return( TRUE );
  238.     if ( strncmp( dir , "1" , len ) == 0 )        return( TRUE );
  239.     if ( strncmp( dir , "DIR" , len ) == 0 )    return( TRUE );
  240.     if ( strncmp( dir , "dir" , len ) == 0 )    return( TRUE );
  241.  
  242.     /* 文字列を小文字にする */
  243.     p = dir;
  244.     while ( len>0 ) {
  245.         *p++ = toupper( *p );
  246.         len--;
  247.     };
  248.     *p = '\0';
  249.     if ( strcmp( dir , "DIR" ) == 0 )        return( TRUE );
  250.  
  251.     return( FALSE );
  252. }
  253.  
  254. static    int    check_lib_num()
  255. {
  256.     int    len,lib_num;
  257.     char    dir[ 20 ] , *p;
  258.  
  259.     if(strncmp(LastStrPtr,"-ダウンロード終了-",20) == 0)    return( TRUE );
  260.  
  261.     lib_num = 0;
  262.     if ( isLibNumDir() == FALSE )                    return( FALSE );
  263.  
  264.     if ( LastStrLen > 19 )                            return( FALSE );
  265.     if ( LastStrLen < 3 )                            return( FALSE );
  266.     if ( strncmp( LastStrPtr , ">" , 2 ) != 0 )    return( FALSE );
  267.  
  268.     p = LastStrPtr + 2;    len = LastStrLen - 2;
  269.     while ( isspace( *p ) ) {    p++;    len--;    };
  270.     strncpy( dir , p , len );
  271.     dir [ len ] = '\0';
  272.  
  273.     /* 文字列を大文字にする */
  274.     p = dir;    while ( len > 0 ) {    *p++ = toupper( *p );    len--;    };
  275.     p = dir;    if ( strncmp( dir , "LIB" , 3 ) == 0 ) p += 3;
  276.  
  277.     /* 仮に LIB 番号を lib_num に入れる */
  278.     lib_num = atoi( p );    if ( lib_num == 0 )        return( FALSE );
  279.  
  280.     /* 0でなければ、新しい LIB 番号とする */
  281.     lib_number = lib_num;
  282.     return( TRUE );
  283. }
  284.  
  285. static    void    check_lib_main( const char *forum__name )
  286. {
  287.     char    *p1 , *p2;
  288.  
  289.     forever {
  290.         check_lib_num();
  291.         print_start_line();        /* *PresentStrPtr を YELLOW で表示 */
  292.                                 /* データライブラリ (1:データ の行 */
  293.         GET_LINE;                /* 先読み */
  294.         check_set_lib_number();
  295.         CHECK_PRINT_LOG;        /* ログ表示 */
  296.         check_skip_useless_line();    /* 必要のない行を読み飛ばす */
  297.         if ( isLIBLine() == YES )            break;
  298.         if ( isLIBFirstLine() == NO )        return;
  299.     };
  300.  
  301.     strcpy( forum_name , forum__name );
  302.     hatsugen_number = lib_number;                /* 発言番号 */
  303.     set_hatsugen_date_lib( PresentStrPtr );        /* 発言の日付 sub.c */
  304.     comment_number = 0;                            /* コメント先番号 */
  305.     *collect_id = '\0';                            /* 発言者のID */
  306.     forum_sub_name_line[ 0 ] = '\0';
  307.  
  308.     /* ID の下には LIB を作らない */
  309.     if ( without_LIB_say_sw == YES )    return;
  310.  
  311.     kaigishitsu_number = LIB;                    /* 会議室番号 */
  312.     check_save_start_sub( );
  313.  
  314.     check_pool_delete_start = PresentStrPtr;
  315.     if ( display_log_file_sw == YES ) color( WHITE );
  316.     forever {
  317.         if ( isLIBLine() == NO ) {
  318.             IFPStrEqu2( "番号 (改行で次頁)" , 17 ) {    /* 2行 読み飛ばす */
  319.                 CHECK_PRINT_LOG;        /* ログ表示 */
  320.                 GET_LINE2 break;        /* 先読み */
  321.                 check_set_lib_number();
  322.                 CHECK_PRINT_LOG;        /* ログ表示 */
  323.                 GET_LINE2 break;        /* 先読み */
  324.                 check_set_lib_number();
  325.                 continue;
  326. /*
  327.                 delete_present_line();    delete_present_line();    continue;
  328. */
  329.             } else {                                            break;
  330.             };
  331.         };
  332.         CHECK_PRINT_LOG;        /* ログ表示 */
  333.         GET_LINE2 break;        /* 先読み */
  334.         check_set_lib_number();
  335.     };
  336.  
  337.     catlog_fwrite( );
  338.     if ( display_log_file_sw == YES ) color( LIGHTBLUE );
  339.     check_skip_useless_line();    /* 必要のない行を読み飛ばす */
  340.  
  341.     /* COLLECT_ID によって収集する */
  342.     /* check_pool_delete_start から PresentStrPtr までを調べる */
  343.     p1 = check_pool_delete_start;
  344.     p2 = PresentStrPtr;        /* 保存用 */
  345.     while ( p1 < p2 ) {
  346.         if ( isCollectID( p1 + 6 ) < 0 ) {            /* sub.c */
  347.             while ( ( p1 < p2 ) && ( *p1 != 0x0a ) ) p1++;
  348.             p1++;                                    /* next char */
  349.             continue;
  350.         };
  351.         check_pool_delete_start = p1;
  352.         set_hatsugen_date_lib( p1 );                /* 発言の日付 sub.c */
  353.         while ( ( p1 < p2 ) && ( *p1 != 0x0a ) ) p1++;
  354.         p1++;                                        /* next char */
  355.         PresentStrPtr = p1;
  356.         kaigishitsu_number = COLLECT_LIB;
  357.         check_save_start_sub( );
  358.         catlog_fwrite( );                            /* file.c */
  359.     };
  360.     PresentStrPtr = p2;        /* 保存用 */
  361.     *collect_id = '\0';
  362. }
  363.  
  364. /****************************************************************
  365. - FTOWNS1  MES(18):通信ソフトについて(3) 92/04/25 -
  366. 001/999   GHH01217  山先              初めての発言
  367. (18)   92/01/24 18:40
  368. *****************************************************************/
  369. static    void    save_start_mes( )
  370. {
  371.     /* 発言番号 */
  372.     hatsugen_number = atoi( hyoudai_line );
  373.  
  374.     /* 日付 */
  375.     set_hatsugen_date_forum( mes_number_line );        /* sub.c */
  376.  
  377.     /*************************************
  378.      123456789 123456789 123456789 1234567
  379.     ( 1)   89/04/13 20:39  006へのコメント
  380.     ( 2)   92/05/04 03:20
  381.     **************************************/
  382.     if (    strlen(  mes_number_line ) > 21
  383.     &&    isdigit( mes_number_line[23] )
  384.     ) {            comment_number = atoi( mes_number_line + 23 );
  385.     } else {    comment_number = 0;
  386.     };
  387.  
  388.     check_save_start_sub( );
  389.  
  390.     /* 発言の表題の行 */
  391.         catlog_fprintf( hyoudai_line );
  392.     /* 会議室番号の行 */
  393.         catlog_fprintf( mes_number_line );
  394. }
  395.  
  396. /**************************************************/
  397. /* 001/999   GHH01217  山先              お知らせ */
  398. /* (00)   92/01/02 03:04                          */
  399. /**************************************************/
  400. static    int    is_1_say_end_inyou( char *now , const char *sub )
  401. {
  402.     int    c;
  403.     int    m1,m2;
  404.  
  405.     if ( Re_sort_log_sw == YES ) {
  406.         /*********************************************/
  407.         /* now を更新して終了 引用発言とはみなさない */
  408.         /*********************************************/
  409.         strcpy( now , sub );    return( TRUE );
  410.     };
  411.     /********************************/
  412.     /* 下の範囲は引用ではないとする */
  413.     /********************************/
  414.     /* 会議室番号のチェック */
  415.     if ( atoi( mes_number_line + 1 ) == atoi( NextStrPtr + 1 ) ) {
  416.         /************************/
  417.         /* 会議室番号が同じ場合 */
  418.         /************************/
  419.         m1 = atoi( now );    m2 = atoi( sub );
  420.         if ( m1 < m2 && m2 <= m1 + 5 ) {
  421.             /*********************************************/
  422.             /* now を更新して終了 引用発言とはみなさない */
  423.             /*********************************************/
  424.             strcpy( now , sub );    return( TRUE );
  425.         };
  426.         color( YELLOW );    beep();
  427.         printf("\n<%s>の\n%s\n%s\nで引用部分を見つけました。\n",
  428.             file_name ,
  429.             hyoudai_line ,        /* 発言の表題の行 */
  430.             mes_number_line        /* 会議室番号の行 */
  431.         );
  432.         if ( m1 < m2 ) {
  433.             /* 新しい基数の方が大きい場合のみ、たずねる */
  434.             color( WHITE );
  435.             c = *PresentStrPtr;
  436.             *PresentStrPtr = '\0';
  437.             printf("%s",check_pool_delete_start);
  438.             *PresentStrPtr = c;
  439.             present_str_print();
  440.             next_str_print();
  441.             color( YELLOW );
  442.             printf( "発言の基数=(旧)%s → (新)%s ですが、\n"
  443.                 "  引用として処理してもよろしいですか?"
  444.                 , now , sub
  445.             );
  446.             color( WHITE );
  447.             if ( Quote_All_Say_sw == NO ) {
  448.                 if ( without_MES_say_sw == YES ) {
  449.                     printf("YES");
  450.                     printf("\n発言の基数を(新=%s)に変更します。",sub);
  451.                     strcpy( now , sub );
  452.                     /********************************/
  453.                     /* 修正しないで終了       */
  454.                     /* しかし、発言の区切りとはする */
  455.                     /********************************/
  456.                     return( TRUE );
  457.                 };
  458.                 if ( get_yesno_mes() == NO ) {
  459.                     printf("発言の基数を(新=%s)に"
  460.                         "変更してもよいですか? ",sub);
  461.                     if ( get_yesno_mes() == YES ) {
  462.                         strcpy( now , sub );
  463.                     };
  464.                     /********************************/
  465.                     /* 修正しないで終了       */
  466.                     /* しかし、発言の区切りとはする */
  467.                     /********************************/
  468.                     return( TRUE );
  469.                 };
  470.             } else {
  471.                 color( RED );
  472.                 printf("\nQuote-All-Say スイッチで強制的に、");
  473.             };
  474.             color( YELLOW );
  475.         };
  476.         puts("修正します。\n");
  477.         color( WHITE );
  478.     } else {
  479.         /**************************/
  480.         /* 会議室番号が異なる場合 */
  481.         /**************************/
  482.  
  483.         ; /* 何もしない → 引用として扱う */
  484.  
  485.     };
  486.     insert_char( PresentStrPtr , '>' );    PresentStrLen++;
  487.     insert_char( NextStrPtr , '>' );    NextStrLen++;
  488.     return( FALSE );
  489. }
  490.  
  491. /* result :
  492.     TRUE    発言の終了である
  493.     FALSE    発言の終了ではない
  494. */
  495. static    int    is_1_say_end( char *now , int mode )
  496. {
  497.     int        d;
  498.     char    sub[ 16 ],*p1,*p2;
  499.  
  500.     if ( PresentStrLen == 0 )        return( NO );
  501.  
  502.     if ( isMesInputLine() == YES ) {
  503.         /* 4:データライブラリ    5:会員情報    6:リアルタイム会議 */
  504.         if ( isMesInputNextLine() == YES )    return( YES );
  505.     };
  506.  
  507.     if ( isMesHyoudaiLine() == YES && isMesSecondLine() == YES ) {
  508.         if ( mode == MES_MODE )                    return( TRUE );
  509.         get_mes_now_number( PresentStrPtr , sub );
  510.         /* 一致する場合は終了 */
  511.         if ( strcmp( now , sub ) == 0 )            return( TRUE );
  512.  
  513.         /************************************/
  514.         /* 引用部分であるので発言を修正する */
  515.         /************************************/
  516.         return ( is_1_say_end_inyou( now , sub ) );
  517.     };
  518.  
  519.     /****************/
  520.     /* - Fxxxxxの行 */
  521.     /****************/
  522.     if ( isMesForumNameLine() == YES ) {
  523.         d = get_mes_num_from_forum_name_line( PresentStrPtr );
  524.         present_str_copy( kaigishitsu_name[ d ] );
  525.  
  526.         if ( mode == MES_MODE )                        return( TRUE );
  527.         /* フォーラム名がある場合  - Fxxxxの場合 */
  528.         p1 = PresentStrPtr + 2;    p2 = sub;
  529.         while ( isalnum( *p1 ) ) *p2++ = *p1++;
  530.         *p2 = '\0';
  531.         /* 一致する場合は終了 */
  532.         if ( strcmp( forum_name , sub ) == 0 )        return( TRUE );
  533.         /* 一致しない場合 */
  534.         if ( mode == FORUM_MODE )                    return( TRUE );
  535.  
  536.         /************************************/
  537.         /* 引用部分であるので発言を修正する */
  538.         /************************************/
  539.         printf("\n<%s>の\n%s\n%s\nで引用部分を見つけました。\n",
  540.             file_name ,
  541.             hyoudai_line ,        /* 発言の表題の行 */
  542.             mes_number_line        /* 会議室番号の行 */
  543.         );
  544.         present_str_print();
  545.         puts("修正します。");
  546.         insert_char( PresentStrPtr , '>' );    PresentStrLen++;
  547.         return( FALSE );    /* 無視する */
  548.     };
  549.  
  550.     /*           123456789 123456 */
  551.     IFPStrEqu3( "電子会議 (1:発言" , 16 )        return( TRUE );
  552.     IFPStrEqu3( "電子会議 (1:コメ" , 16 )        return( TRUE );
  553.     IFPStrEqu3( "電子会議 (改行の" , 16 )        return( TRUE );
  554.     IFPStrEqu3( ">◆次頁はありません◆",22)    return( TRUE );
  555.     IFPStrEqu3(   "◆次頁はありません◆",20)    return( TRUE );
  556.  
  557.     IFPStrEqu3("*****log整理",12)                return( TRUE );
  558.  
  559.     if ( check_start_line() != 0 )                return( TRUE );
  560.  
  561.     if ( kaigishitsu_number == PATIO ) {
  562.         if ( isPATIOEnd() == YES )                return( TRUE );
  563.     };
  564.  
  565.     return( FALSE );
  566. }
  567.  
  568. /**********************************************************************
  569. >ID (改行のみ:自分のHP)
  570. >:GHH01217
  571. >パスワード
  572. >:
  573. >HP>READ NEW
  574. >          1         2         3         4         5         6
  575. > 123456789 123456789 123456789 123456789 123456789 123456789 123456789
  576. >001  [92/05/04 16:00]  GHH01217      オープンしました
  577. ***********************************************************************/
  578.  
  579. /************************************************************************/
  580. /*                                                                      */
  581. /*         save_start_hp()                                             */
  582. /*                                                                      */
  583. /************************************************************************/
  584. static    void    save_start_hp( char *id_name )
  585. {
  586.     /* 日付 */
  587.     set_hatsugen_date_hp( check_pool_delete_start );        /* sub.c */
  588.  
  589.     strcpy( forum_name , id_name );
  590.     hatsugen_number = atoi( check_pool_delete_start );            /* 発言番号 */
  591.     comment_number = 0;                /* コメント先番号 */
  592. /*    ここを呼ぶ前に設定しておくこと        発言者のID
  593.     collect_id[ ]
  594. */
  595.     sprintf( forum_name_line , "- HP:%sのHome Partyです。",id_name);
  596.  
  597.     forum_sub_name_line[ 0 ] = '\0';
  598.  
  599.     check_save_start_sub( );
  600. }
  601.  
  602. static    void    find_hp_first_line()
  603. {
  604.     do {
  605.         GET_LINE;
  606.         check_set_lib_number();
  607.         if ( check_check_end() == YES )    break;
  608.     } while ( isHPFirstLine() == NO );
  609. }
  610.  
  611. static    void    check_hp_loop( char *id_name )
  612. {
  613.     int        d;
  614.  
  615.     d = 0;
  616.     while ( isHPFirstLine() == YES ) {
  617.  
  618.         check_pool_delete_start = PresentStrPtr;
  619.         d = PresentStrLen;
  620.  
  621.         if (    without_HP_say_sw == YES
  622.         ||        check_SearchSayDate( PresentStrPtr + 6 , NO ) == NO
  623.         ) {
  624.             GET_LINE2    break;        check_set_lib_number();
  625.             check_skip_useless_line();    continue;
  626.         };
  627.  
  628.         /******************************************/
  629.         /* 先ず、この発言を CATLOG.TMP に書き出す */
  630.         /******************************************/
  631.         *collect_id = '\0';
  632.         kaigishitsu_number = HP;            /* 会議室番号 */
  633.         save_start_hp( id_name );
  634.         print_start_line();    /* *PresentStrPtr を黄色で表示 */
  635.         if ( display_log_file_sw == YES ) color( WHITE );
  636.         GET_LINE2 ;    /* 次の行 break はしない */
  637.         check_set_lib_number();
  638.         while (    isHPFirstLine() != YES ) {
  639.             CHECK_PRINT_LOG;    /* ログ表示 */
  640.             if ( check_check_end() == YES ) break;
  641.             GET_LINE2    break;    /* 先読み */
  642.             check_set_lib_number();
  643.         };
  644.         catlog_fwrite( );
  645.         if ( display_log_file_sw == YES ) color( LIGHTBLUE );
  646.  
  647.         /****************/
  648.         /* IDで収集? */
  649.         /****************/
  650.         if (    collect_ID_sw != YES
  651.         ||        d == 0
  652.         ) {
  653.             check_skip_useless_line();
  654.         } else {
  655.             /*  123456789 123456789 123456789 123456789 1234 */
  656.             /* 001  [92/05/04 16:00]  GHH01217      オープン */
  657.             if ( isCollectID( check_pool_delete_start + 23 ) >= 0 ) {
  658.                                                                     /* sub.c */
  659.                 /* 一致したので CATLOG.TMP に書き出す */
  660.                 save_start_hp( id_name );
  661.                 catlog_fwrite( );
  662.             };
  663.         };
  664.     };
  665. }
  666.  
  667. static    void    check_hp()
  668. {
  669.     char    id_name[ 12 ] , *p;
  670.  
  671.     print_start_line();    /* *PresentStrPtr を YELLOW で表示 */
  672.  
  673.     /* HP 設定者の ID 番号の入力を促す行? */
  674.     GET_LINE;
  675.     check_set_lib_number();
  676.     if ( PresentStrLen != 10 )                return;
  677.     IFPStrNotEqu2(":",2)                    return;
  678.  
  679.     p = PresentStrPtr + 2;
  680.     while( isspace( *p ) ) p++;    /* skip space */
  681.  
  682.     strncpy( id_name , p , 8 );    /* copy ID */
  683.     id_name[ 8 ] = '\0';
  684.     p = id_name;    while( *p ) *p++ = toupper( *p );    /* 大文字にする */
  685.     /* ID名であるかチェック */
  686.     if ( isIDname( id_name ) != YES )        return;
  687.  
  688.     /* パスワードの入力を促す行? */
  689. /*****************************************************************
  690.     自分の HP には パスワードはいらないので消去
  691.     GET_LINE ( TRUE );    without_crlf( PresentStrPtr );
  692.     check_set_lib_number();
  693.     IFPStrEqu2("パスワード",10)    return;
  694. ******************************************************************/
  695.  
  696.     find_hp_first_line();
  697.     check_hp_loop( id_name );
  698. }
  699.  
  700. /**********************************************************************
  701.           1         2         3         4  
  702.  123456789 123456789 123456789 123456789 12
  703.  1  山本 年秀     GHH01217  05/05 13:12
  704.     題名:まだちょっとおかしい...
  705.  
  706. ***********************************************************************/
  707.  
  708. /************************************************************************/
  709. /*                                                                      */
  710. /*         save_start_mail()                                           */
  711. /*                                                                      */
  712. /************************************************************************/
  713. static    void    save_start_mail()
  714. {
  715. /*
  716. 0         1         2         3         4  
  717.  123456789 123456789 123456789 123456789 12
  718.  1  山本 年秀     GHH01217  05/05 13:12
  719. */
  720.     hatsugen_number = atoi( check_pool_delete_start );        /* 発言番号 */
  721.  
  722.     /* 日付 */
  723.     set_hatsugen_date_mail( check_pool_delete_start );        /* sub.c */
  724.  
  725.     comment_number = 0;                                /* コメント先番号 */
  726.  
  727. /*    ここを呼ぶ前に設定しておくこと        発言者のID
  728.     collect_id[ ]
  729. */
  730.     sprintf( forum_name_line , "- MAIL:%sからのメールです。", forum_name );
  731.  
  732.     forum_sub_name_line[ 0 ] = '\0';
  733.  
  734.     check_save_start_sub( );
  735. }
  736.  
  737. static    void    check_mail()
  738. {
  739.     print_start_line();    /* *PresentStrPtr を YELLOW で表示 */
  740.  
  741.     while (    isMailFirstLine() == YES ) {
  742.  
  743.         check_pool_delete_start = PresentStrPtr;
  744.  
  745.         if (    without_MAIL_say_sw == YES
  746.         ||        check_SearchSayDate( PresentStrPtr+32 , YES ) == NO
  747.         ) {
  748.             GET_LINE2 break;        check_set_lib_number();
  749.             check_skip_useless_line();    continue;
  750.         };
  751.  
  752.         /* 発信者のID = フォーラム名 */
  753.         /*
  754.         0         1         2         3         4  
  755.          123456789 123456789 123456789 123456789 12
  756.          1  山本 年秀     GHH01217  05/05 13:12
  757.         */
  758.         strncpy( forum_name , PresentStrPtr + 22 , 8 );
  759.         forum_name[ 8 ] = '\0';
  760.  
  761.         /******************************************/
  762.         /* 先ず、この発言を CATLOG.TMP に書き出す */
  763.         /******************************************/
  764.         *collect_id = '\0';        /* 1992.9.9 これがなかったために……… */
  765.         kaigishitsu_number = MAIL;                /* 会議室番号 */
  766.         save_start_mail();
  767.         GET_LINE;
  768.         check_set_lib_number();
  769.         while ( isMailFirstLine() != YES ) {
  770.             GET_LINE2 break;    check_set_lib_number();
  771.             if ( check_check_end() == YES ) break;
  772.         };
  773.  
  774.         /* mail の本文を書き出す */
  775.         catlog_fwrite();
  776.  
  777.         /****************/
  778.         /* IDで収集? */
  779.         /****************/
  780.         if ( collect_ID_sw == YES ) {
  781.             if ( isCollectID( forum_name ) >= 0 ) {        /* sub.c */
  782.                 /* 一致したので CATLOG.TMP に書き出す */
  783.                 save_start_mail();
  784.                 catlog_fwrite( );    /* mail の本文を書き出す */
  785.             };
  786.         };
  787.         check_skip_useless_line();
  788.     };
  789. }
  790.  
  791. /**********************************************************************
  792.           1         2         3         4  
  793.  123456789 123456789 123456789 123456789 12
  794.  あなたの御利用状況は次のとおりです
  795.  
  796.  年月  回数  時間 (分)  アクセス料金 サーチャージ  料金合計 (円)
  797.  92/03      47          268          2,386             0            2,386
  798.  92/04      56          489          4,606             0            4,606
  799.  92/05月は課金データがありません
  800. 日毎情報 (改行で表示  E:終了)
  801. >[EOF]
  802.  
  803. ****************
  804. * 以下は新形式 *
  805. ****************
  806. 年/月   回数  時間 (分)     基本料金 (円)       追加料金 (円)     料金合計 (円)
  807. 92/07    104        715             6,408                   0             6,408
  808.                           無料使用権 (円)     課税対象額 (円)       請求額 (円)
  809.                                         0               6,408             6,600
  810. 日毎情報 (改行で表示  E:終了)
  811. >[EOF]
  812. ***********************************************************************/
  813.  
  814. /************************************************************************/
  815. /*                                                                      */
  816. /*         save_start_bill()                                           */
  817. /*                                                                      */
  818. /************************************************************************/
  819. static    void    save_start_bill()
  820. {
  821.     int        i,line,add;
  822.  
  823. /*
  824.           1         2         3         4  
  825.  123456789 123456789 123456789 123456789 12
  826.  92/03      47          268          2,386             0            2,386
  827. 92/09    137        584             5,228                   0             5,228
  828. */
  829.     /* 3か月分の利用回数の合計を計算する 新形式でも同じ位置から計算する */
  830.     line = 0;
  831.     for ( i=0 ; i<3 ; i++ ) line += atoi( bill_line[ i ] + 6 );
  832.  
  833.     strcpy( forum_name , "BILL" );        /* フォーラム名 */
  834.     hatsugen_number = line;                /* 発言番号 */
  835.  
  836.     /* 日付 */
  837.     add = 0;
  838.     if ( bill_line_new_type_sw != TRUE )    add = 1;
  839.     set_hatsugen_date_bill( bill_line[0] + add );        /* sub.c */
  840.  
  841.     comment_number = 0;                    /* コメント先番号 */
  842.     *collect_id = '\0';                /* 発言者のID */
  843.     strcpy( forum_name_line , "- BILL:NIFTYの課金情報です。");
  844.  
  845.     forum_sub_name_line[ 0 ] = '\0';
  846.  
  847.     kaigishitsu_number = BILL;            /* 会議室番号 */
  848.     check_save_start_sub( );
  849.  
  850.     if ( bill_line_new_type_sw == TRUE ) {    catlog_fprintf(BILL_SECOND_LINE2 );
  851.     } else {                                catlog_fprintf(BILL_SECOND_LINE );
  852.     };
  853.  
  854.     for ( i=0 ; i<3 ; i++ )        catlog_fprintf( bill_line[ i ] );
  855. }
  856.  
  857. static    int    check_bill_first_line()
  858. {
  859.     IFPStrEqu2(BILL_FIRST_LINE,strlen(BILL_FIRST_LINE))    return( YES );
  860.     return( NO );
  861. }
  862.  
  863. int        check_bill_second_line()
  864. {
  865.     IFPStrEqu2(BILL_SECOND_LINE,strlen(BILL_SECOND_LINE))    return( YES );
  866.     IFPStrEqu2(BILL_SECOND_LINE2,strlen(BILL_SECOND_LINE2))    return( YES );
  867.     return( NO );
  868. }
  869.  
  870. /************************************************************************
  871.  年月  回数  時間 (分)  アクセス料金 サーチャージ  料金合計 (円)
  872.           1         2         3         4         5         6         7
  873.  123456789 123456789 123456789 123456789 123456789 123456789 123456789 12 
  874.  92/03      47          268          2,386             0            2,386
  875.  92/05月は課金データがありません
  876.  
  877. ****************
  878. * 以下は新形式 *
  879. ****************
  880. 年/月   回数  時間 (分)     基本料金 (円)       追加料金 (円)     料金合計 (円)
  881. 92/07    104        715             6,408                   0             6,408
  882. *************************************************************************/
  883. static    int    check_bill_line()
  884. {
  885.     if ( check_digit(  1 , 2 ) == NO )    return( NO ); /* 年 */
  886.     if ( PresentStrPtr[3] != '/' )        return( NO );
  887.     if ( check_digit(  4 , 5 ) == NO )    return( NO ); /* 月 */
  888.     if (    PresentStrLen != 0 
  889.     &&    strncmp(
  890.             PresentStrPtr+6 ,
  891.             NO_BILL_MES ,
  892.             strlen(NO_BILL_MES)
  893.         )==0
  894.     )    return( YES );
  895.     if ( ! isdigit( PresentStrPtr[ 13 ] ) )    return( NO );    /* 回数 */
  896.     if ( ! isdigit( PresentStrPtr[ 26 ] ) )    return( NO );    /* 時間 */
  897.     if ( ! isdigit( PresentStrPtr[ 41 ] ) )    return( NO );    /* 料金 */
  898.     if ( ! isdigit( PresentStrPtr[ 55 ] ) )    return( NO );    /* サーチャージ */
  899.     if ( ! isdigit( PresentStrPtr[ 72 ] ) )    return( NO );    /* 合計 */
  900.     return( YES );
  901. }
  902.  
  903. static    int    check_bill()
  904. {
  905.     int        i;
  906.  
  907.     print_start_line();    /* *PresentStrPtr を YELLOW で表示 */
  908.  
  909.     GET_LINE ( TRUE );        check_set_lib_number();    /* 先読み */
  910.     while ( check_bill_second_line() == NO ) {
  911.         if(strncmp(PresentStrPtr+6,"月は課金データがありません",26)==0) break;
  912.         if ( check_check_end() == YES )        return( TRUE );
  913.         GET_LINE ( TRUE );        check_set_lib_number();    /* 先読み */
  914.     };
  915.     /*******************************/
  916.     /* 3か月分の課金データをストア */
  917.     /*******************************/
  918.     for ( i=0 ; i<3 ; i++ ) strcpy( bill_line[i] , "         0" );
  919.     if (    (    PresentStrLen != 0
  920.             &&    strncmp(
  921.                     PresentStrPtr ,
  922.                     BILL_SECOND_LINE2 ,
  923.                     strlen( BILL_SECOND_LINE2 )
  924.                 ) == 0
  925.             )
  926.     ||        strncmp(PresentStrPtr+6,"月は課金データがありません",26) == 0
  927.     ) {
  928.         /**********/
  929.         /* 新形式 */
  930.         /**********/
  931.         bill_line_new_type_sw = TRUE;
  932.         i = 0;
  933.         while ( i<3 ) {
  934.             IFPStrEqu2(BILL_SECOND_LINE2,strlen(BILL_SECOND_LINE2))    {
  935.                 GET_LINE ( TRUE );        check_set_lib_number();
  936.                 present_str_copy( bill_line[i] );
  937.                 i++;
  938.             } else if (
  939.                 strncmp(PresentStrPtr+6,"月は課金データがありません",26) == 0
  940.             ) {
  941.                 present_str_copy( bill_line[i] );
  942.                 i++;
  943.                 GET_LINE ( TRUE );        check_set_lib_number();    /* 先読み */
  944.             } else {
  945.                 if ( check_check_end() == YES )    break; /* return( TRUE ); */
  946.                 GET_LINE ( TRUE );        check_set_lib_number();    /* 先読み */
  947.             };
  948.         };
  949.     } else {
  950.         /**********/
  951.         /* 旧形式 */
  952.         /**********/
  953.         bill_line_new_type_sw = FALSE;
  954.         for ( i=0 ; i<3 ; i++ ) {
  955.             GET_LINE ( TRUE );    check_set_lib_number();
  956.             if ( check_bill_line() == NO )        return( TRUE );
  957.             present_str_copy( bill_line[i] );
  958.         };
  959.     };
  960.     if ( without_BILL_say_sw == NO )    save_start_bill();
  961.     if ( bill_line_new_type_sw != TRUE ) {
  962.         GET_LINE ( TRUE );    check_set_lib_number();    /* 先読み */
  963.     };
  964.     return( TRUE );
  965. }
  966.  
  967. static    int        check_end_bill()
  968. {
  969.     if ( PresentStrLen == 0 )        return( NO );
  970.  
  971.     if ( check_bill_first_line() == YES )    return( YES );
  972.     /**********************/
  973.     /* 下は新形式でも同じ */
  974.     /**********************/
  975.             /* 123456789 123456789 123456789 */
  976.     IFPStrEqu("日毎情報 (改行で表示  E:終了)",29)    return( YES );
  977.  
  978.     return( NO );
  979. }
  980.  
  981. /****************************************************************************/
  982. /****************************************************************************/
  983. /****************************************************************************/
  984.  
  985. /*
  986. >番号 発言 (未読)  最新  会議室名
  987. >18     323 (   8)   08/19   【自 由】Free Talkers Salon『CITY』
  988. >20     214 (   2)   08/20   【交 流】自己紹介の場、『無節荘』第12館
  989. の行の処理
  990. */
  991. static    void    initial_kaigishitsu_name()
  992. {
  993.     int    i;
  994.  
  995.     for ( i=0 ; i<MAX_KAIGISHITSU ; i++ ) {
  996.         kaigishitsu_name[ i ][ 0 ] = '\0';
  997.     };
  998. }
  999.  
  1000. void    check_skip_useless_line()    /* 必要のない行を読み飛ばす */
  1001. {
  1002.     int        line;
  1003.  
  1004. #ifdef    TEST
  1005.     printf("\nskip_useless_lineです。\n");
  1006. #endif
  1007.  
  1008.     /* 番号 発言 (未読)  最新  会議室名 の行を探す */
  1009.     while ( check_start_line() ==  0 ) {
  1010.         /*         123456789 123456789 123456789 123456 */
  1011.         IFPStrEqu("番号 発言 (未読)  最新  会議室名",36) {
  1012.             /* 会議室の一覧を kaigishitsu_name に入れる */
  1013.             initial_kaigishitsu_name();    /* 初期化 */
  1014.             forever {
  1015.                 CHECK_PRINT_LOG;            /* ログ表示 */
  1016.                 GET_LINE;                    /* 先読み */
  1017.                 check_set_lib_number();
  1018.                 IFPStrEqu2(">",2)    break;    /* 行頭の「>」で終了 */
  1019.                 line = atoi( PresentStrPtr );
  1020.                 if ( line == 0 )    break;    /* 終了 */
  1021.                 if ( line > 20 )    break;    /* 終了 */
  1022.                 present_str_copy( kaigishitsu_name[ line ] );
  1023.             };
  1024.         };
  1025.         if ( isLIBLine() == YES )    break;
  1026.         CHECK_PRINT_LOG;    /* ログ表示 */
  1027.         GET_LINE;        /* 先読み */
  1028.         check_set_lib_number();
  1029.         ERROR_CHECK;
  1030.     };
  1031. #ifdef    TEST
  1032.     printf("\nskip_useless_lineで↓の行が確認されました。\n");
  1033.     present_str_print();
  1034.     if ( get_yesno() == NO )    exit( 0 );
  1035. #endif
  1036. }
  1037.  
  1038. static    void    skip_1_say( char *now , int mode )
  1039. {
  1040.     if ( display_log_file_sw == YES )    color( LIGHTBLUE );
  1041.     forever {
  1042.         if (    check_check_end() == YES
  1043.         &&        is_1_say_end( now , mode ) == TRUE
  1044.         ) {
  1045.                 break;
  1046.         };
  1047.             /* 123456789 123456789 123456789 */
  1048.         IFPStrEqu("続き(改行で表示 S:次の発言)",30) {
  1049.             if (    NextStrLen == 2
  1050.             &&    strncmp( NextStrPtr , ">" , 2 ) == 0
  1051.             ) {
  1052.                 /* 2行 読み飛ばす */
  1053.                 delete_present_line();    delete_present_line();
  1054.                 continue;
  1055.             };
  1056.         };
  1057.         CHECK_PRINT_LOG;    /* ログ表示 */
  1058.         GET_LINE2 break;    /* 先読み */
  1059.         check_set_lib_number();
  1060.     };
  1061. }
  1062.  
  1063. static    void    save_1_say( const char *forum__name , char *now , int mode )
  1064. {
  1065.     int        i;
  1066.     char    *p1 , *p2;
  1067.  
  1068. #ifdef    TEST
  1069.     printf("\nforum_name=<%s>",forum__name);
  1070.     printf("\nnow=<%s>",now);
  1071.     printf("\nmode=<%d>",mode);
  1072.     printf("\nmes_number_line=↓\n%s",mes_number_line();
  1073. #endif
  1074.  
  1075.     /* フォーラム名 */
  1076.     strcpy( forum_name , forum__name );
  1077.  
  1078.     check_pool_delete_start = PresentStrPtr;
  1079.  
  1080.     if (    without_MES_say_sw == YES
  1081.     ||        check_SearchSayDate( mes_number_line + 7 , NO ) == NO
  1082.     ) {
  1083.         skip_1_say( now , mode );        return;
  1084.     };
  1085.  
  1086.     /****************************/
  1087.     /* 削除した発言は登録しない */
  1088.     /*              1992.8.26   */
  1089.     /****************************/
  1090.     if ( Delete_Deleted_Say_sw == YES ) {
  1091.         if ( hyoudai_line[ 3 ] == '/' ) {
  1092.             p1 = hyoudai_line + 10;        p2 = hyoudai_line + 38;
  1093.         } else {
  1094.             p1 = hyoudai_line + 12;        p2 = hyoudai_line + 39;
  1095.         };
  1096.         if ( *p1 == '*' || strncmp( p2 , "発言者削除" , 10 ) == 0 ) {
  1097.             skip_1_say( now , mode );        return;
  1098.         };
  1099.     };
  1100.  
  1101.     /******************************************/
  1102.     /* 先ず、この発言を CATLOG.TMP に書き出す */
  1103.     /******************************************/
  1104.  
  1105.     /* 会議室を表す行をセット */
  1106.     i = atoi( mes_number_line + 1 );    /* 会議室番号 */
  1107.     if ( 0<i && i<21 ) {
  1108.         if ( kaigishitsu_name[ i ][ 0 ] != '\0' ) {
  1109.             strcpy(    forum_sub_name_line , kaigishitsu_name[ i ] );
  1110.         };
  1111.     } else {
  1112.             strcpy(    forum_sub_name_line , "" );
  1113.     };
  1114.  
  1115.     *collect_id = '\0';
  1116.  
  1117.     /* 会議室番号 */
  1118.     kaigishitsu_number =    ( mes_number_line[1] & 0x0f ) * 10 + 
  1119.                             ( mes_number_line[2] & 0x0f );
  1120.     save_start_mes( );
  1121.     if ( display_log_file_sw == YES )    color( WHITE );
  1122.     forever {
  1123.         if (    check_check_end() == YES
  1124.         &&        is_1_say_end( now , mode ) == TRUE
  1125.         ) {
  1126.                 break;
  1127.         };
  1128.             /* 123456789 123456789 123456789 */
  1129.         IFPStrEqu("続き(改行で表示 S:次の発言)",30) {
  1130.             if (    NextStrLen == 2
  1131.             &&    strncmp( NextStrPtr , ">" , 2 ) == 0
  1132.             ) {
  1133.                 /* 2行 読み飛ばす */
  1134.                 delete_present_line();    delete_present_line();
  1135.                 continue;
  1136.             };
  1137.         };
  1138.         CHECK_PRINT_LOG;    /* ログ表示 */
  1139.         GET_LINE2 break;    /* 先読み */
  1140.         check_set_lib_number();
  1141.     };
  1142.     if ( display_log_file_sw == YES ) color( LIGHTBLUE );
  1143.  
  1144.     if ( catlog_fwrite( ) == 0 ) {
  1145.         strcpy(str,"save_1_say 書き込みが出来ませんでした。");
  1146.         error_return( str );
  1147.     };
  1148.  
  1149.     /****************/
  1150.     /* IDで収集? */
  1151.     /****************/
  1152.     if ( collect_ID_sw != YES )            return;
  1153.     if ( hyoudai_line[ 3 ] == '/' ) {    p1 = hyoudai_line + 10;
  1154.     } else {                            p1 = hyoudai_line + 12;
  1155.     };
  1156.     if ( isCollectID( p1 ) >= 0 ) {        /* sub.c */
  1157.         save_start_mes( );
  1158.         if ( catlog_fwrite( ) == 0 ) {
  1159.             strcpy(str,"save_1_say 書き込みが出来ませんでした。");
  1160.             error_return( str );
  1161.         };
  1162.     };
  1163. }
  1164.  
  1165. /**************************************************/
  1166. /* xxx/xxx から始まる場合                         */
  1167. /*                                                */
  1168. /* 001/999   GHH01217  山先              お知らせ */
  1169. /* (00)   92/01/02 03:04                          */
  1170. /**************************************************/
  1171. static    void    check_hyoudai_line_mode( char *dir_name )
  1172. {
  1173.     char    now[ 8 ];
  1174.  
  1175.     if ( isMesSecondLine()== NO ) return;
  1176.  
  1177.     initial_kaigishitsu_name();
  1178.  
  1179.     /* now の設定 */
  1180.     get_mes_now_number( PresentStrPtr , now );    /* sub.c */
  1181.  
  1182.     strcpy( forum_name_line, "- UNKNOWN:フォーラム名が不明の発言です。");
  1183.     forum_sub_name_line[ 0 ] = '\0';
  1184.  
  1185.     forever {
  1186.         /* 発言の表題の行 */
  1187.         present_str_copy( hyoudai_line );
  1188.         print_start_line();    /* *PresentStrPtr を黄色で表示 */
  1189.         GET_LINE;            /* 会議室番号の行 */
  1190.         check_set_lib_number();
  1191.         CHECK_PRINT_LOG;        /* ログ表示 */
  1192.         present_str_copy( mes_number_line );
  1193.         GET_LINE;            /* 先読み : 発言開始の行 */
  1194.         check_set_lib_number();
  1195.         save_1_say( dir_name , now , MES_MODE );
  1196.         ERROR_CHECK;
  1197.         check_skip_useless_line();    /* 必要のない行を読み飛ばす */
  1198.         if ( isMesHyoudaiLine() != YES )    return;
  1199.     };
  1200. }
  1201.  
  1202. /*********************************************************************/
  1203. /* - Fxxxx から始まる場合                                            */
  1204. /* - FTOWNS1  MES(18):通信ソフトについて(3) 92/04/25 -              */
  1205. /*     フォーラム名は- Fxxxx から取る                                     */
  1206. /*     - Fxxxx  で終了                                               */
  1207. /*                                                                   */
  1208. /*     同じフォーラムの中の発言を処理する                            */
  1209. /*     フォーラムが異なれば出る。                                    */
  1210. /*                                                                   */
  1211. /*********************************************************************/
  1212. static    void
  1213. check_forum_name_mode_loop( const char *forum_name , int mode )
  1214. {
  1215.     int    d;
  1216.     char    sub[ 24 ] , now[ 8 ];
  1217.  
  1218. #ifdef    TEST
  1219.     printf("\ncheck_forum_name_mode_loop(%s,%d) 今の行=↓\n",forum_name,mode);
  1220.     present_str_print();
  1221. #endif
  1222.  
  1223.     if ( isMesHyoudaiLine() == NO ) {
  1224.         if ( PresentStrPtr == NULL )    return;
  1225.         printf("\n表題の行でないといけないのに、そうなっていないぞ~~。");
  1226.         printf("\nあれ~~CATLOGのバグだぞ~~↓\n");
  1227.         present_str_print();
  1228.     };
  1229.  
  1230.     *now = '\0';
  1231.     get_mes_now_number( PresentStrPtr , now );    /* sub.c */
  1232.  
  1233.     forever {
  1234.         print_start_line();    /* *PresentStrPtr を YELLOW で表示 */
  1235.         present_str_copy( hyoudai_line );
  1236.  
  1237.         GET_LINE;            /* 先読み : 会議室番号の行 */
  1238.         check_set_lib_number();
  1239.         CHECK_PRINT_LOG;            /* ログ表示 */
  1240.         present_str_copy( mes_number_line );
  1241.  
  1242.         GET_LINE;            /* 先読み : 発言開始の行 */
  1243.         check_set_lib_number();
  1244.  
  1245.         /**************/
  1246.         /* 発言の登録 */
  1247.         /**************/
  1248.         save_1_say( forum_name , now , mode );
  1249.         ERROR_CHECK;
  1250.  
  1251.         check_skip_useless_line();        /* 必要のない行を読み飛ばす */
  1252.         while( isLIBFirstLine()==YES ) check_lib_main( forum_name );
  1253.  
  1254.         /* 次の発言に対する処理 */
  1255.         if ( isMesHyoudaiLine() == YES ) {
  1256.             /* 次の発言   */
  1257.             /* 何もしない */
  1258.         } else if ( isMesForumNameLine() == YES ) {
  1259.             /* - FFMHOB の行 */
  1260.             if ( mode == FORUM_MODE ) {
  1261.                 /* フォーラム名が異なれば終了 */
  1262.                 get_forum_name( PresentStrPtr , sub );
  1263.                 if (strcmp( forum_name , sub ) != 0 )        return;
  1264.             };
  1265.             d = get_mes_num_from_forum_name_line( PresentStrPtr );
  1266.             present_str_copy( kaigishitsu_name[ d ] );
  1267.             present_str_copy( forum_sub_name_line );
  1268.             GET_LINE;        /* 先読み : 発言の表題の行 */
  1269.             check_set_lib_number();
  1270.             check_skip_useless_line();    /* 必要のない行 */
  1271.             if ( isMesHyoudaiLine() != YES ) return;
  1272.             /********************/
  1273.             /* now を書き換える */
  1274.             /********************/
  1275.             get_mes_now_number( PresentStrPtr , now );
  1276.         } else {
  1277.             return;
  1278.         };
  1279.     };
  1280. }
  1281.  
  1282. /*******************************************/
  1283. /* ここからが forum_name_mode の本当の入口 */
  1284. /*******************************************/
  1285. static    void
  1286. check_forum_name_mode()
  1287. {
  1288. /*
  1289.     char    forum_name[ 24 ];
  1290. */
  1291.  
  1292. #ifdef    TEST
  1293.     printf("\ncheck_forum_name_mode() 今の行=<");
  1294.     present_str_print();
  1295. #endif
  1296.  
  1297.     initial_kaigishitsu_name();
  1298.     forum_name_line[ 0 ] = forum_sub_name_line[ 0 ] = '\0';
  1299.  
  1300.     forum_name[ 0 ] = '\0';
  1301.  
  1302.     print_start_line();        /* *PresentStrPtr を YELLOW で表示 */
  1303.     present_str_copy( forum_sub_name_line );
  1304.  
  1305.     get_forum_name( PresentStrPtr , forum_name );
  1306.  
  1307.     GET_LINE;                /* 表題の行 */
  1308.     check_set_lib_number();
  1309.     check_skip_useless_line();            /* 必要のない行を読み飛ばす */
  1310.     if ( isMesHyoudaiLine() != YES || isMesSecondLine() != YES ) {
  1311.         return;
  1312.     };
  1313.     check_forum_name_mode_loop( forum_name , FORUM_MODE );
  1314. }
  1315.  
  1316. /***********************************************************/
  1317. /* <FMフォーラム3(ホビー館) >    FFMHOB                  */
  1318. /* 1:お知らせ            2:掲示板      3:電子会議          */
  1319. /* 4:データライブラリ    5:会員情報    6:リアルタイム会議  */
  1320. /* 7:SYSOP 宛メール      8:オプション  E:終了              */
  1321. /***********************************************************/
  1322. static    int        check_forum_mode_end()
  1323. {
  1324.     if ( isMesInputLine() == YES ) {                        /* フォーラム */
  1325.         /* 4:データライブラリ    5:会員情報    6:リアルタイム会議 */
  1326.         if ( isMesInputNextLine() == YES )        return( YES );
  1327.     };
  1328.     IFPStrEqu("ID (改行のみ:自分のHP)",23)        return( YES );    /* HP */
  1329.     if ( isHPFirstLine() == YES )                return( YES );    /* HP */
  1330.     IFPStrEqu2("ID (改行のみ:自分のパティオ)",29)    return( YES );    /* PATIO */
  1331.     if ( isMailFirstLine() == YES )                return( YES );    /* MAIL */
  1332.     if ( check_bill_first_line() == YES )        return( YES );    /* BILL */
  1333.     if ( isLIBLine() == YES )                    return( YES );    /* LIB 番号 */
  1334.     return( NO );
  1335. }
  1336.  
  1337. static    void    check_forum_mode()
  1338. {
  1339.     int    d;
  1340. /*
  1341.     char    forum_name[ 24 ];
  1342. */
  1343.  
  1344. #ifdef    TEST
  1345.     printf("\ncheck_forum_mode() の入口です。今の行↓\n");
  1346.     present_str_print();
  1347. #endif
  1348.  
  1349.     initial_kaigishitsu_name();
  1350.     forum_name_line[ 0 ] = forum_sub_name_line[ 0 ] = '\0';
  1351.     forum_name[ 0 ] = '\0';
  1352.  
  1353.     print_start_line();    /* *PresentStrPtr を黄色で表示 */
  1354.     /* <FMフォーラム3(ホビー館) >    FFMHOB */
  1355.     /* の行をコピー                           */
  1356.     strncpy( forum_name_line , LastStrPtr , LastStrLen );
  1357.     forum_name_line[ LastStrLen ] = '\0';
  1358.     forum_sub_name_line[ 0 ] = '\0';
  1359.     if ( get_forum_name_last_str( forum_name ) == NO ) {
  1360.         /* 前の行にフォーラム名がない */
  1361.         strcpy( forum_name , "BEGIN" );
  1362.     };
  1363.  
  1364.     forever {
  1365.         GET_LINE;    /* 先読み:不用の行 */
  1366.         check_set_lib_number();
  1367.         check_skip_useless_line();    /* 必要のない行を読み飛ばす */
  1368.         while( isLIBFirstLine() == YES ) check_lib_main( forum_name );
  1369.  
  1370.         while ( isMesForumNameLine() == YES ) {
  1371.             d = get_mes_num_from_forum_name_line( PresentStrPtr );
  1372.             present_str_copy( kaigishitsu_name[ d ] );
  1373.             present_str_copy( forum_sub_name_line );
  1374.             print_start_line(); /* *PresentStrPtr を黄色で表示 */
  1375.             GET_LINE;    /* 先読み */
  1376.             check_set_lib_number();
  1377.             check_skip_useless_line();    /* 必要のない行を読み飛ばす */
  1378.             while( isLIBFirstLine() == YES ) check_lib_main( forum_name );
  1379.             /******************************************/
  1380.             /* フォーラム関係以外の行があると終了する */
  1381.             /******************************************/
  1382.             if ( check_forum_mode_end() == YES )        return;
  1383.         };
  1384.  
  1385. #ifdef    TEST
  1386.     printf("\ncheck_forum_mode() の途中です。今の行=↓\n");
  1387.     present_str_print();
  1388.     printf("\nフォーラム名     =<%s>",forum_name);
  1389.     printf("\nフォーラム名の行 =↓\n<%s>",forum_name_line();
  1390.     printf("\n会議室名の行=↓\n<%s>",forum_sub_name_line();
  1391. #endif
  1392.  
  1393.         /******************************************/
  1394.         /* フォーラム関係以外の行があると終了する */
  1395.         /*                              1992.9.15 */
  1396.         /******************************************/
  1397.         if ( check_forum_mode_end() == YES )        return;
  1398.  
  1399.         check_forum_name_mode_loop( forum_name , FORUM_IN_MODE );
  1400.  
  1401.         check_skip_useless_line();    /* 必要のない行を読み飛ばす */
  1402.         while (    isLIBFirstLine() ==YES    ) check_lib_main( forum_name);
  1403.  
  1404.         /******************************************/
  1405.         /* フォーラム関係以外の行があると終了する */
  1406.         /*                              1992.9.15 */
  1407.         /******************************************/
  1408.         if ( check_forum_mode_end() == YES )        return;
  1409.     };
  1410. }
  1411.  
  1412.  
  1413. /****************************************************************/
  1414. /*****************************************************************
  1415. >ID (改行のみ:自分のパティオ)
  1416. >:GHH01217
  1417. >パスワード
  1418. >:
  1419. >番号 発言 (未読)  最新  会議室名
  1420. > 1      60 (  60)   12/18   CATLOGの部屋だよ
  1421.   123456789 123456789 123456789 123456789 123456789 123456789
  1422. >00001/00060 GHH01217  山先          ご利用に際しての注意
  1423. >( 1)   92/12/14 00:06
  1424. >PATIO(R)>
  1425. >PATIO(N)>
  1426. >PATIO(C)>
  1427. >読む (1:表示 改行のみ:次タイトル)
  1428. >>
  1429. *****************************************************************/
  1430. /****************************************************************/
  1431. static    void    save_start_patio( const char *id_name )
  1432. {
  1433.     kaigishitsu_number = PATIO;
  1434.  
  1435.     /* 日付 */
  1436.     set_hatsugen_date_forum( mes_number_line );        /* sub.c */
  1437.  
  1438.     strcpy( forum_name , id_name );
  1439.     hatsugen_number = atoi( hyoudai_line );            /* 発言番号 */
  1440.  
  1441.     /* コメント先番号 */
  1442.     if (    strlen(  mes_number_line ) > 21
  1443.     &&        isdigit( mes_number_line[23] )
  1444.     ) {            comment_number = atoi( mes_number_line + 23 );
  1445.     } else {    comment_number = 0;
  1446.     };
  1447.  
  1448. /*    ここを呼ぶ前に設定しておくこと
  1449.     collect_id[ ]
  1450.     forum_name_line[ ]
  1451.     forum_sub_name_line[ ]
  1452. */
  1453.     check_save_start_sub( );
  1454. }
  1455.  
  1456. static    void    check_patio_loop( const char *id_name )
  1457. {
  1458.     int        i , mode;
  1459.     char    now[ 8 ] , *p1;
  1460.  
  1461.     /* フォーラム名 */
  1462.     strcpy( forum_name , id_name );
  1463.  
  1464.     mode = FORUM_IN_MODE;
  1465.  
  1466.     initial_kaigishitsu_name();
  1467.  
  1468.     check_skip_useless_line();    /* 必要のない行を読み飛ばす */
  1469.  
  1470.     /* now の設定 */
  1471.     get_mes_now_number( PresentStrPtr , now );    /* sub.c */
  1472.  
  1473.     sprintf( forum_name_line, "PATIO:%s です。" , id_name );
  1474.     forum_sub_name_line[ 0 ] = '\0';
  1475.  
  1476.     while ( isPATIOFirstLine() == YES ) {
  1477.         check_pool_delete_start = PresentStrPtr;
  1478.         present_str_copy( hyoudai_line );
  1479.         CHECK_PRINT_LOG;    /* ログ表示 */
  1480.         GET_LINE2     break;    /* 先読み */
  1481.         check_set_lib_number();
  1482.         present_str_copy( mes_number_line );
  1483.         CHECK_PRINT_LOG;    /* ログ表示 */
  1484.         GET_LINE2     break;    /* 先読み */
  1485.         check_set_lib_number();
  1486.  
  1487.         if (    without_PATIO_say_sw == YES
  1488.         ||        check_SearchSayDate( mes_number_line + 7 , NO ) == NO
  1489.         ) {
  1490.             skip_1_say( now , mode );        continue;
  1491.         };
  1492.         /****************************/
  1493.         /* 削除した発言は登録しない */
  1494.         /****************************/
  1495.         if ( Delete_Deleted_Say_sw == YES ) {
  1496.             if (    *( hyoudai_line + 12 ) == '*'
  1497.             ||        strncmp( hyoudai_line + 39 , "発言者削除" , 10 ) == 0
  1498.             ) {
  1499.                 skip_1_say( now , mode );    continue;
  1500.             };
  1501.         };
  1502.         /* 会議室を表す行をセット */
  1503.         i = atoi( mes_number_line + 1 );    /* 会議室番号 */
  1504.         if ( 0<i && i<21 ) {
  1505.             if ( kaigishitsu_name[ i ][ 0 ] != '\0' ) {
  1506.                 strcpy(    forum_sub_name_line , kaigishitsu_name[ i ] );
  1507.             };
  1508.         } else {
  1509.                 strcpy(    forum_sub_name_line , "" );
  1510.         };
  1511.         *collect_id = '\0';
  1512.         /* 会議室番号 */
  1513.         kaigishitsu_number = PATIO;
  1514.         /******************************************/
  1515.         /* 先ず、この発言を CATLOG.TMP に書き出す */
  1516.         /******************************************/
  1517.         save_start_patio( id_name );
  1518.         if ( display_log_file_sw == YES )    color( WHITE );
  1519.         forever {
  1520.             if (    check_check_end() == YES
  1521.             &&        is_1_say_end( now , mode ) == TRUE
  1522.             ) {
  1523.                     break;
  1524.             };
  1525.                     /* 123456789 123456789 123456789 */
  1526.             IFPStrEqu("続き(改行で表示 S:次の発言)",30) {
  1527.                 if (    NextStrLen == 2
  1528.                 &&    strncmp( NextStrPtr , ">" , 2 ) == 0
  1529.                 ) {
  1530.                     /* 2行 読み飛ばす */
  1531.                     delete_present_line();    delete_present_line();
  1532.                     continue;
  1533.                 };
  1534.             };
  1535.             CHECK_PRINT_LOG;    /* ログ表示 */
  1536.             GET_LINE2 break;    /* 先読み */
  1537.             check_set_lib_number();
  1538.         };
  1539.         if ( display_log_file_sw == YES ) color( LIGHTBLUE );
  1540.         if ( catlog_fwrite( ) == 0 ) {
  1541.             strcpy(str,"check_patio_loop 書き込みが出来ませんでした。");
  1542.             error_return( str );
  1543.             break;
  1544.         };
  1545.         /****************/
  1546.         /* IDで収集? */
  1547.         /****************/
  1548.         if ( collect_ID_sw == YES ) {
  1549.             p1 = hyoudai_line + 12;
  1550.             if ( isCollectID( p1 ) >= 0 ) {        /* sub.c */
  1551.                 save_start_mes( );
  1552.                 if ( catlog_fwrite( ) == 0 ) {
  1553.                     strcpy(str,"save_1_say 書き込みが出来ませんでした。");
  1554.                     error_return( str );
  1555.                 };
  1556.             };
  1557.         };
  1558.         if ( isPATIOFirstLine() == NO )    check_skip_useless_line();
  1559.     };
  1560. }
  1561.  
  1562. static    void    check_patio_main()
  1563. {
  1564.     char    id_name[ 12 ] , *p;
  1565.  
  1566.     print_start_line();    /* *PresentStrPtr を YELLOW で表示 */
  1567.  
  1568.     /* PATIO 設定者の ID 番号の入力を促す行? */
  1569.     GET_LINE;
  1570.     check_set_lib_number();
  1571.     if ( PresentStrLen != 10 )                return;
  1572.     IFPStrNotEqu2(":",2)                    return;
  1573.  
  1574.     p = PresentStrPtr + 2;
  1575.     while( isspace( *p ) ) p++;    /* skip space */
  1576.  
  1577.     strncpy( id_name , p , 8 );    /* copy ID */
  1578.     id_name[ 8 ] = '\0';
  1579.     touppers( id_name );                            /* 大文字にする */
  1580.     /* ID名であるかチェック */
  1581.     if ( isIDname( id_name ) != YES )        return;
  1582.  
  1583.     check_patio_loop( id_name );
  1584. }
  1585.  
  1586. /***********************************************************************/
  1587. /*                                                                     */
  1588. /*      check_check_end()          各発言の終了判定の入口              */
  1589. /*                                                                     */
  1590. /***********************************************************************/
  1591. int        check_check_end()
  1592. {
  1593.     if ( PresentStrPtr == NULL )        return( YES );
  1594.     if ( PresentStrLen == 0 )            return( NO );
  1595.  
  1596.     if ( isMesEnd() == YES )            return( YES );
  1597.     if ( isHPEnd() == YES )                return( YES );
  1598.     if ( isPATIOEnd() == YES )            return( YES );
  1599.     if ( isMailEnd() == YES )            return( YES );
  1600.     if ( isCLIPEnd() == YES )            return( YES );            /* sub.c */
  1601.     if ( check_end_bill() == YES )        return( YES );
  1602.  
  1603.     /* >\n : end 条件に入れることは問題があるかもしれない */
  1604. /* 入れないことにした
  1605.     IFPStrEqu2(">",PresentStrLen)        return( YES );
  1606. */
  1607.  
  1608.     /* CCSCPY を使って整理した文書 */
  1609.     IFPStrEqu2("*****",10)            return( YES );
  1610.  
  1611.             /*  123456789 123456789 1 */
  1612.     IFPStrEqu2("ようこそNIFTY-Serveへ",21)    return( YES );
  1613.  
  1614.     return( NO );
  1615. }
  1616.  
  1617. static    int    check_start_line()
  1618. {
  1619.     if ( PresentStrLen == 0 )        return( 0 );
  1620.  
  1621.     /* フォーラムの入口 */
  1622.     /************************************************
  1623.     1:お知らせ            2:掲示板      3:電子会議
  1624.     *************************************************/
  1625.     if ( isMesInputLine() == YES ) {                        /* フォーラム */
  1626.         /* 4:データライブラリ    5:会員情報    6:リアルタイム会議 */
  1627.         if ( isMesInputNextLine() == YES )                    return( 1 );
  1628.     };
  1629.     /* フォーラムの会議室の名前 */
  1630.     if ( isMesForumNameLine() == YES )                        return( 2 );
  1631.     /* 発言の表題の行 */
  1632.     if ( isMesHyoudaiLine()==YES && isMesSecondLine()==YES ) return( 3 );
  1633.     /* Home Party の入口 */
  1634.             /*  123456789 123456789 123 */
  1635.     IFPStrEqu2("ID (改行のみ:自分のHP)",23)                return( 4 );
  1636.     /* MAIL */
  1637.     if ( isMailFirstLine() == YES )                            return( 5 );
  1638.     /* BILL */
  1639.     if ( check_bill_first_line() == YES )                    return( 6 );
  1640.     /* Home Party の入口 */
  1641.     if ( isHPFirstLine() == YES )                            return( 7 );
  1642.     /* LIB の入口 */
  1643.     if ( isLIBFirstLine() == YES )                            return( 8 );
  1644.     /* PATIOの入口 */
  1645.             /*  123456789 123456789 123456789 */
  1646.     IFPStrEqu2("ID (改行のみ:自分のパティオ)",29)            return( 9 );
  1647.     /* クリッピングサービスの行 */
  1648.     if ( isCLIPFirstLine() == YES )                            return( 10 );
  1649.     if ( isCLIPLine() == YES )                                return( 10 );
  1650.  
  1651.     return( 0 );
  1652. }
  1653.  
  1654. static    void    mes_copy( char *dir_name )
  1655. {
  1656.     int        d;
  1657.  
  1658.     d = check_start_line();
  1659.     while (  d != 0 ) {
  1660. #ifdef    TEST
  1661.     printf("\nmes_copy( %d ) 今の行↓\n" , d );
  1662.     present_str_print();
  1663. #endif
  1664.         switch ( d ) {
  1665.             case 1:    /* フォーラムの入口 */
  1666.                 check_forum_mode();
  1667.                 break;
  1668.             case 2:    /* フォーラム名がある場合  - Fxxxxの場合 */
  1669.                 check_forum_name_mode();                        break;
  1670.             case 3:    /* フォーラム名がない場合  xxx/xxxからの場合 */
  1671.                 check_hyoudai_line_mode( dir_name );            break;
  1672.             case 4:    /* Home Party の入口 */
  1673.                 check_hp();                                        break;
  1674.             case 5:    /* Mail の入口 */
  1675.                 check_mail();                                    break;
  1676.             case 6:    /* Bill の入口 */
  1677.                 check_bill();                                    break;
  1678.             case 7:    /* HP の発言 */
  1679.                 check_hp_loop( dir_name );                        break;
  1680.             case 8: /* LIB の入口 */
  1681.                 check_lib_main( dir_name );                        break;
  1682.             case 9: /* PATIO の入口 */
  1683.                 check_patio_main();                                break;
  1684.             case 10:    /* クリッピングサービスの入口 */
  1685.                 check_clip_main();                                break;
  1686.             default:
  1687.                 CHECK_PRINT_LOG;    /* ログ表示 */
  1688.                 break;
  1689.         };
  1690.         ERROR_CHECK;
  1691.         d = check_start_line();
  1692.     };
  1693. }
  1694.  
  1695. /***********************************************************************/
  1696. /*                                                                     */
  1697. /*      check_main()              check.c の 入口                      */
  1698. /*                                                                     */
  1699. /***********************************************************************/
  1700. static    void    check_main_sub( char *dir_name )
  1701. {
  1702.     GET_LINE;    /* 先読み */
  1703.     check_set_lib_number();
  1704.     forever {
  1705.         check_pool_delete_start = PresentStrPtr;
  1706.         if ( check_start_line() != 0 ) {
  1707.             mes_copy( dir_name );
  1708.         } else {
  1709.             CHECK_PRINT_LOG;    /* ログ表示 */
  1710.             ERROR_CHECK;
  1711.             GET_LINE;    /* 先読み */
  1712.             check_set_lib_number();
  1713.         };
  1714.     };
  1715. }
  1716.  
  1717. void    check_main( long fsize , const char *dir , const char *file_path )
  1718. {
  1719.     char    dir_name[ 24 ];
  1720.  
  1721.     if ( is_catlog_file( file_name ) != 0 ) {
  1722.         color( YELLOW );
  1723.         printf("\nこのファイルはCATLOGで整理したファイルです。"
  1724.                 "\n\t無視してもよろしいですか? ");
  1725.         color( WHITE );
  1726.         if ( get_yesno_mes() == YES ) {        printf( "\n無視します。");
  1727.         } else {                            sortlog_loop_file( file_name );
  1728.         };
  1729.         return;
  1730.     };
  1731.  
  1732.     sprintf(partition_line,"*****log整理(%s)***** %s *****",VERSION,file_path);
  1733.  
  1734.     forum_name[ 0 ] = '\0';
  1735.  
  1736.     /* file.c */
  1737.     if ( initial_check_pool( fsize , YES ) == FALSE )    return;
  1738.  
  1739.         strcpy( file_name , file_path );
  1740.         strcpy( dir_name , dir );
  1741.         if ( last_yen( dir_name ) != dir_name ) {
  1742.             error_bug( "check_main でフォーラム名に \\ 記号が入っているよ。");
  1743.         };
  1744.  
  1745.         if ( display_log_file_sw == YES ) color( LIGHTBLUE );
  1746.         check_main_sub( dir_name );
  1747.  
  1748.     end_check_pool();
  1749. }
  1750.  
  1751.